﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Business;
using Telerik.Web.UI;

namespace BVVD_Website.ql_thi_sinh
{
    public partial class frmSobaodanh : System.Web.UI.Page
    {
        // public List<clsSobaodanh> mylist;
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                //initializeSBD();
                Session["mylist"] = null;
                BVVDDataContext db = new BVVDDataContext();
                var list = (from kt in db.LST_KYTHIs
                            where kt.TRANGTHAI.Equals("1")
                            select kt).ToList();
                ddlKythi.DataSource = list;
                ddlKythi.DataTextField = "TENKT";
                ddlKythi.DataValueField = "MAKT";
                ddlKythi.DataBind();

                //fillgrvSobaodanh();
                grvSobaodanh.DataSource = initializeSBD();
                grvSobaodanh.DataBind();



            }
        }

        protected void ddlKythi_SelectedIndexChanged(object sender, Telerik.Web.UI.DropDownListEventArgs e)
        {
            initializeSBD();
            Session["mylist"] = null;
            fillgrvSobaodanh();
            grvSobaodanh.DataBind();
            // txtTIENTO.Text = mylist.Count.ToString();
        }

        private void fillgrvSobaodanh()
        {
            if (Session["mylist"] != null)
            {
                List<clsSobaodanh> mylist = Session["mylist"] as List<clsSobaodanh>;
                grvSobaodanh.DataSource = mylist.OrderBy(a => a.RECID);
            }
            else
            {

                grvSobaodanh.DataSource = initializeSBD();
            }

        }

        private List<clsSobaodanh> initializeSBD()
        {

            BVVDDataContext db = new BVVDDataContext();
            var listfromDB = (from ts in db.LST_THISINHs
                              where ts.MAKT.Equals(ddlKythi.SelectedValue)
                              join sbd in db.F_SOBAODANHs on new { MATS = ts.MATS, MAKT = ts.MAKT } equals new { MATS = sbd.MATS, MAKT = sbd.MAKT }
                              into temp1
                              from tmp1 in temp1.DefaultIfEmpty()
                              select new clsSobaodanh
                              {
                                  RECID = ts.RECID,
                                  MAKT = ts.MAKT,
                                  TENKT = ts.LST_KYTHI.TENKT,
                                  MATS = ts.MATS,
                                  TENTS = ts.HODEM + " " + ts.TENTS,
                                  NGAYSINH = ts.NGAYSINH,
                                  CMND = ts.SOCMND,
                                  DIACHI = ts.DIACHI,
                                  SOBAODANH = tmp1.SOBAODANH != null ? tmp1.SOBAODANH : null

                              }).ToList();
            //mylist = listfromDB;

            return listfromDB;

        }


        protected void grvSobaodanh_ItemCommand(object sender, Telerik.Web.UI.GridCommandEventArgs e)
        {
            if (e.CommandName.Equals("SavetoDB"))
            {
                if (Page.IsValid)
                {
                    BVVDDataContext db = new BVVDDataContext();
                    if (Session["mylist"] != null)
                    {
                        List<clsSobaodanh> mylist = Session["mylist"] as List<clsSobaodanh>;

                        //db.F_SOBAODANHs.InsertAllOnSubmit(mylist);
                        foreach (clsSobaodanh sbd in mylist)
                        {
                            F_SOBAODANH f = new F_SOBAODANH
                            {
                                MAKT = sbd.MAKT,
                                MATS = sbd.MATS,
                                SOBAODANH = sbd.SOBAODANH

                            };
                            checkRowExist(f);
                        }
                        grvSobaodanh.Rebind();
                        rnAlert.Text = "Đánh số báo danh cho " + new BVVDLibrary().countTS(ddlKythi.SelectedValue) + " thí sinh thành công ";
                        rnAlert.Show();

                    }
                    else
                    {
                        rnAlert.Text = "OK";
                        rnAlert.Show();

                    }
                }



            }

        }

        private string checkRowExist(F_SOBAODANH fc)
        {
            BVVDDataContext db = new BVVDDataContext();
            F_SOBAODANH value = (from ck in db.F_SOBAODANHs
                                 where ck.MAKT.Equals(fc.MAKT)
                                         && ck.MATS.Equals(fc.MATS)
                                 select ck).SingleOrDefault();
            if (value == null)
            {
                if (!String.IsNullOrEmpty(fc.MAKT))
                {
                    db.F_SOBAODANHs.InsertOnSubmit(fc);
                    db.SubmitChanges();
                    return "Add";
                }
                else
                {
                    return "Dont Save";
                }
            }
            else if (!value.SOBAODANH.Equals(fc.SOBAODANH))
            {
                value.SOBAODANH = fc.SOBAODANH;
                //value.NGAYNHAN = fc.NGAYNHAN;
                db.SubmitChanges();
                return "Update";
            }
            else
            {

                return "Cancel";
            }

        }




        protected void grvSobaodanh_NeedDataSource(object sender, Telerik.Web.UI.GridNeedDataSourceEventArgs e)
        {
            fillgrvSobaodanh();

        }

        protected void rbConfirm_OK_Click(object sender, EventArgs e)
        {
            string prefix = txtTIENTO.Text;
            int length = Convert.ToInt32(txtDODAI.Value.GetValueOrDefault(2));
            List<clsSobaodanh> initList = initializeSBD();
            List<clsSobaodanh> mylist = new List<clsSobaodanh>();
            if (Page.IsValid)
            {
                //RadWindowManager1.RadConfirm("Are you sure?", "confirmCallBackFn", 330, 180, null, "Server RadConfirm", "");

                BVVDDataContext db = new BVVDDataContext();
                int i = 0;

                foreach (clsSobaodanh ts in initList)
                {
                    i++;
                    string sodb = prefix + i.ToString().PadLeft(length, '0');
                    ts.SOBAODANH = sodb;

                }

            }

            Session["mylist"] = initList;
            grvSobaodanh.Rebind();

        }




        protected void lbtnSetSBD_Click(object sender, EventArgs e)
        {
            BVVDLibrary bl = new BVVDLibrary();
            if (Page.IsValid)
            {
                string msg = "";
                if (bl.countPT_TS(ddlKythi.SelectedValue) > 0)
                {
                    msg += "Tất cả các thí sinh đã được đánh số báo danh và xếp vào phòng thi. Bạn không thể thay đổi số báo danh lúc này ";
                    RadWindowManager1.RadAlert(msg, 300, 200, "Thông báo", null);
                }
                else
                {
                    if (bl.countSBD(ddlKythi.SelectedValue) > 0)
                    {
                        msg += "Tất cả thí sinh đã được đánh số báo danh. Hiện tại việc xếp phòng thi chưa được thực hiên. Bạn có thể tạo lại số báo danh.Bạn đồng ý đánh lại số báo danh cho thí sinh ?";

                    }
                    else
                    {
                        msg += "Bạn đồng ý đánh số báo danh cho thí sinh ?";
                    }

                    confirmMessage.Text = msg;
                    string script = "function f(){$find(\"" + rw_customConfirm.ClientID + "\").show(); Sys.Application.remove_load(f);}Sys.Application.add_load(f);";
                    ScriptManager.RegisterStartupScript(this, this.GetType(), "key", script, true);

                }

            }
        }
    }

    public class clsSobaodanh
    {
        public int RECID { get; set; }
        public string MAKT { get; set; }
        public string TENKT { get; set; }
        public string MATS { get; set; }
        public string TENTS { get; set; }
        public DateTime? NGAYSINH { get; set; }
        public string CMND { get; set; }
        public string DIACHI { get; set; }
        public string SOBAODANH { get; set; }

        public clsSobaodanh()
        {

        }
        public clsSobaodanh(int recid, string makt, string tenkt, string mats, string tents, DateTime? ngaysinh, string cmnd, string diachi, string sobaodanh)
        {
            RECID = recid;
            MAKT = makt;
            TENKT = tenkt;
            MATS = mats;
            TENTS = tents;
            NGAYSINH = ngaysinh;
            CMND = cmnd;
            DIACHI = diachi;
            SOBAODANH = sobaodanh;

        }


    }
}